---
title: Print a letter or report
summary: Renders (if needed) and prints a report/letter via clsPrint.
status: draft
owner: SAIF Case Management
last_reviewed: 2026-08-21
library: SAIF.Services.Printing
reference_type: embedded
operation_id: OP-REPORTING-PRINT
trigger: Caller invokes Reporting.ReportBase.Print
---

# Print a letter or report

Ensures a report/letter has been rendered to PDF bytes, then prints it via the internally owned `clsPrint` instance.

| Field | Value |
| --- | --- |
| **Operation ID** | OP-REPORTING-PRINT |
| **Trigger** | Caller invokes `Reporting.ReportBase.Print(printer, overwrite)` |
| **Inputs** | `printer`, `overwrite` flag |
| **Outputs** | Boolean success flag |
| **Primary components** | `Reporting.ReportBase.Print` |
| **Entry point** | `SAIF.Services.Printing\Reporting\ReportBase.vb` |

## Steps

1. If no rendered file exists yet (or `overwrite` is requested), calls [Render a letter or report](render-report.md) first.
   - On failure: no rendered file becomes available; see step 3.
2. If a rendered file is now available, sets `xPrint.Printer = printer` and calls `xPrint.printPDF(m_reportFile)` — delegates to [Print raw PDF bytes](print-pdf.md) — then returns `True`.
3. Returns `False` if no rendered file could be produced.

## Process flow

```mermaid
flowchart TD
	Start([Print called]) --> Check{Rendered file exists and not overwrite?}
	Check -->|No| Render[Call Render]
	Check -->|Yes| HasFile[File already available]
	Render --> HasFile2{File available now?}
	HasFile2 -->|Yes| SetPrinter[Set xPrint.Printer]
	HasFile2 -->|No| EndFail([Return False])
	HasFile --> SetPrinter
	SetPrinter --> Call[Call xPrint.printPDF]
	Call --> EndOk([Return True])
```

## Failure and edge-case behavior
- Returns `False` if [Render a letter or report](render-report.md) could not produce a rendered file.

## Related documentation
- [Operations and processes](../operations-processes.md)
- [Business rules](../business-rules.md)

## Sources
- `SAIF.Services.Printing\Reporting\ReportBase.vb`
